﻿using NetDimension.NanUI;
using NetDimension.NanUI.HostWindow;
using NetDimension.NanUI.JavaScript;

namespace NanUI.Server;

/// <summary>
///     主程序
/// </summary>
internal class ZMainServer : Formium
{
    /// <summary>
    ///     实体
    /// </summary>
    public ZMainServer()
    {
        //初始化子页面集合
        ChildFormList = new List<(string, Formium)>();
        Size = new Size(400, 260);
        Subtitle = "痛苦值计算";
        Title = "解放时间";
        AllowFullScreen = false; //是否允许当前窗体能够执行全屏操作的状态。默认值是false。当WindowType为Kiosk或Layered时此设置无效。
        AllowSystemMenu = true; //在用户右键点击可拖动区域时是否显示系统菜单。当WindowType为Kiosk时此设置无效。
        //SplashScreen//启动画面
        //SplashScreen.AutoHide = false;//启动画面自动隐藏
        ////SplashScreen.Image=
        //AutoShowMask = false;//在窗体启动并等待页面加载时，是否自动显示等待页面。
        //CanMaximize = false;//设置或获取当前窗体是否能够使用“最大化”命令。当WindowType为Kiosk或Layered时此设置无效。
        //CanMinimize = false;//设置或获取当前窗体是否能够使用“最小化”命令。当WindowType为Kiosk时此设置无效。
        //ClientSize = new System.Drawing.Size(1024, 768);//获取当前窗体的用户区域大小。
        //Height = 768;//设置或获取当前窗体的高度。
        Icon = new Icon("./Static/image/Duckling.ico"); //设置或获取当前窗体的图标。
        //IsFullScreen = false;//指示当前窗体是否处于全屏状态。当WindowType为Kiosk或Layered时此设置无效。
        //Left = 0;//设置或获取窗体当前所在屏幕的横坐标。
        //Location = new System.Drawing.Point(1, 1);//设置或获取窗体当前所在屏幕的位置。
        //Mask//获取当前窗体遮罩层的实例。
        MaximumSize = new Size(400, 260); //设置或获取当前窗体能够达到的最大尺寸。当WindowType为Kiosk或Layered时此设置无效。
        MinimumSize = new Size(400, 260); //设置或获取当前窗体能够达到的最小尺寸。当WindowType为Kiosk或Layered时此设置无效。
        //ResizAble  = false;//指定当前窗口是否能够改变大小。当WindowType为Kiosk或Layered时此设置无效。ResizAble
        ShowInTaskBar = true; //设置或获取当前窗口是否在任务栏显示。当WindowType为Kiosk时此设置无效。
        StartPosition = FormStartPosition.CenterScreen; //设置或获取窗口的启动位置。当WindowType为Kiosk时此设置无效。
        //Top = 1;//设置或获取当前窗口的纵坐标。
        //TopMost = false;//设置或获取当前窗口是否为顶层窗口。
        //Width = 2;// 设置或获取当前窗口的宽度。
        // WindowState = System.Windows.Forms.FormWindowState.Maximized;//设置或获取当前窗口的状态。当WindowType为Kiosk时此设置无效。
        //StartPosition = FormStartPosition.CenterScreen;
        // Set up settings for BorderlessWindow style.
        // 设置 Borderless 样式窗体的各项扩展属性，需要注意泛型T需要对应正确的WindowType
        //var style = UseExtendedStyles<BorderlessWindowStyle>();
        //style.ShadowColor = ColorTranslator.FromHtml("#614964");
        //style.ShadowEffect = ShadowEffect.Big;
        //style.CornerStyle = CornerStyle.Huge;

        var style = UseExtendedStyles<BorderlessWindowStyle>();
        style.CornerStyle = CornerStyle.None;
    }

    /// <summary>
    /// 启动项
    /// </summary>
    protected override void OnReady()
    {
        //LoadEnd += PageLoadEnd;
        //ShowDevTools();//开始调式
        JumpMinWindow();
    }

    /// <summary>
    ///     注册跳转方法
    ///     Formium.external.fun.JumpMinWindow()
    /// </summary>
    private void JumpMinWindow()
    {
        //注册同步方法
        RegisterJavaScriptObject("fun", new JavaScriptObject
        {
            {
                "JumpMinWindow",
                args =>
                {
                    InvokeIfRequired(() =>
                    {
                        Hide(); //隐藏当前窗体
                        var cf = ChildFormList.Where(a => a.Item1 == "MinWindow").Select(a => a.Item2).FirstOrDefault();
                        if (cf == null)
                        {
                            cf = new MinSingle(); //创建新窗体-跳转到子窗体
                            ChildFormList.Add(("MinWindow", cf)); //将子窗体存储起来
                        }

                        cf.Show(this); //跳转到子窗体,并将当前窗体设置成父窗体
                    });
                    return null;
                }
            }
        }); //然后将这个对象注册到 JavaScript 环境的Formium.external里，并取名launcher。
    }

    #region 属性

    /// <summary>
    ///     设置窗体样式类型
    /// </summary>
    public override HostWindowType WindowType => HostWindowType.Borderless; //Layered Borderless

    /// <summary>
    ///     指定启动 Url
    /// </summary>
    public override string StartUrl => "http://pages.app/ZMainPage.html";

    /// <summary>
    ///     子窗体
    /// </summary>
    private List<(string, Formium)> ChildFormList { get; }

    #endregion
}